// 定义State
// 'state' should be a method that returns an object in store/user.js
// 在muxt中State必须声明为一个函数，且返回一个 对象
export const state = () => ({
  userinfo: {
    token: "",
    user: {}
  },
  // 用来存储回跳的页面路径
  backurl: ""
});

// 定义mutations
export const mutations = {
  setBackurl(state, data) {
    state.backurl = data;
  },
  // 有一个默认参数state，通过state就可以获取在state中定义的成员
  // 第二个参数是你调用这个方法时所传递的数据，可以是任意类型的数据
  setUserInfo(state, data) {
    // state.userinfo = data
    // setTimeout(() => {
    state.userinfo.token = data.token;
    state.userinfo.user = data.user;
    // }, 1000);
  }
  // clearUserInfo(state){
  //     state.userinfo = {}
  // }
};

// 定义actions
export const actions = {
  // 这个函数中可以来执行异步操作，拿到异步操作的结果，调用mutaitons中的方法，达到为state中的成员赋值的目的
  // store：是默认的参数
  setUserInfoAction(store, data) {
    // store就是当前的仓库对象，里面的commot函数可以调用mutaitons中的成员
    // 调用mutations中的成员
    store.commit("setUserInfo", data);
  },
  // 将登陆操作封装到actions中
  loginAction({ commit }, canshu) {
    // 异步请示
    return this.$axios({
      method: "post",
      url: "/accounts/login",
      data: canshu
    }).then(res => {
      // 如果在user仓库外部调用actions或者mutations中的方法，则需要使用this.$store
      // 如果在同一个仓库中进行方法的调用，则不需要再写this.$store了
      // 同时在同一个仓库中调用方法，也不需要再指定仓库，默认就是当前仓库
      // this.$store.commit('user/setUserInfo',res.data)
      commit("setUserInfo", res.data);
      // 如果在外围还需要使用这个值，则必须返回
      return res;
    });
  }
};
